/**
 * Redux存储的类型定义
 */

// 用户角色类型
export interface Role {
  _id?: string;          // MongoDB的ObjectId
  id: string | number;   // 兼容旧版id
  roleName: string;      // 角色名称
  roleType: number;      // 角色类型编号
  rights: string[];      // 权限列表
  seqId?: number;        // 序列ID，可选
}

// 用户信息类型
export interface UserInfo {
  _id?: string;          // MongoDB的ObjectId
  id: string;            // 兼容旧版接口
  username: string;      // 用户名
  roleId: string | number; // 角色ID引用
  region: string;        // 区域/部门
  role?: Role;           // 角色对象，可选
  roleState: boolean;    // 用户状态
  default?: boolean;     // 是否为默认用户
  avatar?: string;       // 头像URL
  introduction?: string; // 个人介绍
  gender?: number;       // 性别
  phone?: string;        // 电话
  email?: string;        // 邮箱
  location?: string;     // 地址
  seqId?: number;        // 序列ID
}

// 用户状态类型
export interface UserState {
  userInfo: UserInfo | null;
  token: string | null;
  isLoading: boolean;
  error: string | null;
  rights: string[]; // 用户权限列表
}

// 全局状态类型
export interface GlobalState {
  isInitialized: boolean;
  notifications: number;
  systemMessages: string[];
  [key: string]: any;
}

// 折叠状态类型
export interface CollapsedState {
  isCollapsed: boolean;
}

// 简化版，只关心布尔值
export type CollapsedType = boolean;

// 加载中类型
export interface LoadingState {
  isLoading: boolean;
}

// 简化版，只关心布尔值
export type LoadingType = boolean;

// 设置状态类型
export interface SettingsState {
  theme: string;
  colorPrimary: string;
  layout: string;
  fixedHeader: boolean;
  contentWidth: string;
  [key: string]: string | boolean | number | undefined;
}

// 根状态类型
export interface RootState {
  user: UserState;
  global: GlobalState;
  settings: SettingsState;
  collapsed: CollapsedType;
  loading: LoadingType;
}

// 分发函数类型
export type AppDispatch = <T>(action: T) => T; 